import request from '@/utils/request'

// 用户相关API
export const userApi = {
  // 用户登录
  login(data) {
    return request({
      url: '/users/login',
      method: 'post',
      data
    })
  },
  
  // 获取所有用户
  getAllUsers() {
    return request({
      url: '/users',
      method: 'get'
    })
  },
  
  // 根据用户名查询用户
  getUserByHm(hm) {
    return request({
      url: `/users/${hm}`,
      method: 'get'
    })
  },

  // 根据角色查询用户
  getUsersByRole(role) {
    return request({
      url: `/users/role/${role}`,
      method: 'get'
    })
  },
  
  // 新增用户
  addUser(data) {
    return request({
      url: '/users',
      method: 'post',
      data
    })
  },
  
  // 更新用户
  updateUser(hm, data) {
    return request({
      url: `/users/${hm}`,
      method: 'put',
      data
    })
  },
  
  // 删除用户
  deleteUser(hm) {
    return request({
      url: `/users/${hm}`,
      method: 'delete'
    })
  },
  
  // 修改密码
  changePassword: (hm, data) => {
    return request({
      url: `/users/${hm}/password`,
      method: 'put',
      data
    })
  },

  // 重置密码（管理员功能）
  resetPassword: (hm, data) => {
    return request({
      url: `/users/${hm}/reset-password`,
      method: 'put',
      data
    })
  },

  // 启用/禁用用户
  toggleUserStatus: (hm, status) => {
    return request({
      url: `/users/${hm}/status`,
      method: 'put',
      data: { status }
    })
  },

  // 获取当前用户信息
  getCurrentUser: () => {
    return request({
      url: '/users/current',
      method: 'get'
    })
  },

  // 刷新token
  refreshToken: () => {
    return request({
      url: '/users/refresh-token',
      method: 'post'
    })
  },

  // 检查权限
  checkPermission: (requiredRole) => {
    return request({
      url: `/users/check-permission/${requiredRole}`,
      method: 'get'
    })
  }
}

// 学生相关API
export const studentApi = {
  // 获取所有学生
  getAllStudents() {
    return request({
      url: '/students',
      method: 'get'
    })
  },
  
  // 根据学号查询学生
  getStudentById(sno) {
    return request({
      url: `/students/${sno}`,
      method: 'get'
    })
  },
  
  // 根据姓名查询学生
  getStudentsByName(name) {
    return request({
      url: `/students/name/${name}`,
      method: 'get'
    })
  },
  
  // 根据系名查询学生
  getStudentsByDept(dept) {
    return request({
      url: `/students/dept/${dept}`,
      method: 'get'
    })
  },
  
  // 新增学生
  addStudent(data) {
    return request({
      url: '/students',
      method: 'post',
      data
    })
  },
  
  // 更新学生信息
  updateStudent(data) {
    return request({
      url: '/students',
      method: 'put',
      data
    })
  },
  
  // 删除学生
  deleteStudent(sno) {
    return request({
      url: `/students/${sno}`,
      method: 'delete'
    })
  },
  
  // 条件查询学生
  queryStudents(params) {
    return request({
      url: '/students/query',
      method: 'post',
      data: params
    })
  },

  // 批量导入学生
  batchImportStudents(data) {
    return request({
      url: '/students/batch',
      method: 'post',
      data
    })
  },

  // 获取学生学分统计
  getStudentCreditsSummary() {
    return request({
      url: '/students/credits-summary',
      method: 'get'
    })
  }
}

// 课程相关API
export const courseApi = {
  // 获取课程列表（支持分页和搜索）
  getCourses(params) {
    return request({
      url: '/courses',
      method: 'get',
      params
    })
  },
  
  // 获取所有课程
  getAllCourses() {
    return request({
      url: '/courses',
      method: 'get'
    })
  },
  
  // 根据课程号查询课程
  getCourseById(cno) {
    return request({
      url: `/courses/${cno}`,
      method: 'get'
    })
  },
  
  // 根据教师名查询课程
  getCoursesByTeacher(teacher) {
    return request({
      url: `/courses/teacher/${teacher}`,
      method: 'get'
    })
  },
  
  // 新增课程
  addCourse(data) {
    return request({
      url: '/courses',
      method: 'post',
      data
    })
  },
  
  // 更新课程
  updateCourse(cno, data) {
    return request({
      url: `/courses/${cno}`,
      method: 'put',
      data
    })
  },
  
  // 删除课程
  deleteCourse(cno) {
    return request({
      url: `/courses/${cno}`,
      method: 'delete'
    })
  },
  
  // 获取课程详情
  getCourseDetails(cno) {
    return request({
      url: `/courses/${cno}/detail`,
      method: 'get'
    })
  },
  
  // 获取课程平均分
  getCourseAverage(cno) {
    return request({
      url: `/courses/${cno}/average`,
      method: 'get'
    })
  },
  
  // 获取所有课程平均分
  getAllCoursesAverage() {
    return request({
      url: '/courses/average-score',
      method: 'get'
    })
  },
  
  // 获取课程统计信息
  getCourseStats(cno) {
    return request({
      url: `/courses/${cno}/stats`,
      method: 'get'
    })
  }
}

// 选课相关API
export const enrollmentApi = {
  // 获取选课记录列表（支持分页和搜索）
  getEnrollments(params) {
    return request({
      url: '/sc',
      method: 'get',
      params
    })
  },
  
  // 获取所有选课记录
  getAllEnrollments() {
    return request({
      url: '/sc',
      method: 'get'
    })
  },
  
  // 根据学号查询选课记录
  getEnrollmentsByStudent(sno) {
    return request({
      url: `/sc/student/${sno}`,
      method: 'get'
    })
  },
  
  // 根据课程号查询选课记录
  getEnrollmentsByCourse(cno) {
    return request({
      url: `/sc/course/${cno}`,
      method: 'get'
    })
  },
  
  // 学生选课
  enrollCourse(data) {
    return request({
      url: '/sc/enroll',
      method: 'post',
      data
    })
  },
  
  // 学生退课
  dropCourse(sno, cno) {
    return request({
      url: `/sc/drop/${sno}/${cno}`,
      method: 'delete'
    })
  },
  
  // 录入/更新成绩
  updateGrade(data) {
    return request({
      url: '/sc/grade',
      method: 'put',
      data
    })
  },
  
  // 查询学生各科成绩
  getStudentGrades(sno) {
    return request({
      url: `/sc/grades/${sno}`,
      method: 'get'
    })
  },
  
  // 查询课程不及格学生
  getFailedStudents(cno) {
    return request({
      url: `/sc/failed/${cno}`,
      method: 'get'
    })
  },
  
  // 按班级统计不及格人数
  getFailedStatsByClass() {
    return request({
      url: '/sc/failed-stats',
      method: 'get'
    })
  },
  
  // 按班级统计各分数段人数
  getGradeStatsByClass() {
    return request({
      url: '/sc/grade-stats',
      method: 'get'
    })
  },
  
  // 检查选课状态
  checkEnrollment(sno, cno) {
    return request({
      url: `/sc/check/${sno}/${cno}`,
      method: 'get'
    })
  },
  
  // 批量更新成绩
  batchUpdateGrades(data) {
    return request({
      url: '/sc/batch-grades',
      method: 'put',
      data
    })
  }
}